因為公司政策規定,傳機密壓縮檔的時候都要加上密碼,
但是收到的檔案這麼多,每次都要翻信找密碼真的太麻煩,而且不小心刪掉信就直接完蛋...
若公司壓縮檔密碼只有數字的話,就可以用本程式破解喔~
(密碼有英文加數字的話要用之前提過的密碼本破解)
但是如果公司密碼是多位數的數字,等到破解完檔案,可能已經下班了><
所以這時候用 multiprocessing 解碼,速度就會加快很多!
使用環境
程式碼
import pyzipper
from multiprocessing import Process
import time
zip_file = pyzipper.AESZipFile("加密壓縮檔.zip",'r')
zip_flag = False
start_time = time.time()
# 開始破解壓縮檔密碼
def decode(start_pwd, end_pwd):
global zip_file
global zip_flag
for password in range(start_pwd, end_pwd):
try:
if zip_flag == False:
zip_file.extractall(pwd=str(password).encode())
print('成功破解,密碼:{}'.format(password))
end_time = time.time()
print("總共花費{}秒".format(end_time-start_time))
zip_file.close()
zip_flag = True
break
else:
break
except:
pass
if __name__ == '__main__':
print("正在破解...")
process_num = 1 # 設定要使用的process數量
workload = 12000 # 設定每個process負責破解的密碼數量
processes = []
# 建立processes
for i in range(process_num):
curr_process = Process( target = decode, args=(i*workload, (i+1)*workload))
processes.append(curr_process)
# 開始processes
for p in processes:
p.start()
# 等待各process完成
for p in processes:
p.join()
成果發表會
為了更方便看出multiprocessing的速度差異,我這邊將密碼範圍設為0-12000,
分別設定用1、2、3、4、5個執行緒同時執行解密程式。
溫馨小提醒
從上圖結果可以看到,執行緒數量越多猜出密碼的速度越快,
但是如果process設定超過當前機器的CPU核心數量的話,CPU間程序處理的切換成本反而會降低處理效率!
所以不一定設定越多process越好喔~
如果想知道當前機器的CPU核心數量可以用下列語法來查詢:
import multiprocessing
cpus = multiprocessing.cpu_count()
print(cpus)